﻿/*
 * Created by: 
 * Created: Wednesday, February 28, 2007
 */

using System;
using System.Linq;
using System.Collections.Generic;
using Shop.Business.Domain.Customers;

namespace Shop.Business.Domain.Orders.Logic
{
    public class OrderCalculator
    {
        private Order order;
        private bool preorder = false;
        

//        public bool ExistPhysicalProduct()
//        {
//            if (order.Items != null && order.Items.Count > 0)
//            {
//                foreach (OrderItem item in order.Items)
//                {
//                    if (item != null && item is ProductItem && ((ProductItem)item).Product != null && ((ProductItem)item).Product.Type != 0)
//                        return true;
//                }
//            }
//            return false;
//        }
//
//
        public OrderCalculator(Order order)
        {
            this.order = order;
        }

        public OrderCalculator(Order order, bool preorder)
        {
            this.order = order;
            this.preorder = preorder;
        }


        public decimal Total()
        {
            List<OrderItem> orderItems = preorder ? order.Items.Where(i => i.Product.Qty < 1).ToList() : order.Items.Where(i => i.Product.Qty > 0).ToList();
            switch (order.OrderStatus)
            {
                case OrderStatus.Draft:
                    return orderItems.Sum(i => i.Product.Price * i.Quantity); ;
                case OrderStatus.Current:
                    return orderItems.Sum(i => i.Price * i.Quantity); ;
                default:
                    return 0;
            }
        }

        public decimal DiscountOfTotal()
        {
            return this.Total() * ((Customer)order.CreatedBy).Discount / 100;
        }

        public decimal TotalWithDiscount()
        {
            return this.Total() - this.DiscountOfTotal();
        }

        public decimal TotalWithDelivery()
        {
            decimal ret = this.TotalWithDiscount();
            if (ret > 1000 && order.DeliveryType.Id == 1)
                return ret;
            return ret + order.DeliveryType.Price;
        }


//
//        public decimal TotalWithVAT
//        {
//            get
//            {
//                return CreditCardCharge + Vat + Total;
//            }
//        }
//        public decimal TotalExVAT
//        {
//            get
//            {
//                return Total;
//            }
//        }
//
//        #region Visitors
//
//        protected class VatVisitor : BaseItemsVisitor
//        {
//            private decimal result = 0;
//            private decimal vat = 0;
//            private decimal creditCardChargeRate = 0;
//            private readonly bool isFunctionalCurrency = true;
//
//            public VatVisitor(decimal vat)
//            {
//                this.vat = vat;
//                this.isFunctionalCurrency = true;
//            }
//
//            public VatVisitor(decimal vat, decimal pCreditCardChargeRate, bool isFunctionalCurrency)
//            {
//                this.vat = vat;
//                this.creditCardChargeRate = pCreditCardChargeRate;
//                this.isFunctionalCurrency = isFunctionalCurrency;
//            }
//
//            public decimal Value
//            {
//                get { return result; }
//            }
//
//            public override void Accept(Order order)
//            {
//                result = 0;
//                base.Accept(order);
//            }
//
//            private void AcceptTaxableItem(OrderItem item)
//            {
//                decimal lSP = isFunctionalCurrency ? item.Sellprice.Amount : item.OSellprice.Amount;
//                decimal lSubtotal = lSP * item.Quantity;
//                decimal lTotal = decimal.Truncate(lSubtotal * vat) / 100;
//                result += lTotal;
//            }
//
//            public override void Accept(CarriageItem item)
//            {
//                //                result += item.DeliveryType.Cost * Convert.ToDecimal(VAT) / 100;
//                //if (isFunctionalCurrency)
//                //{
//                //    result += item.Sellprice.Amount * vat / 100;
//                //}else
//                //{
//                //    result += item.OSellprice.Amount * vat / 100;
//                //}
//
//                /*
//                decimal lSP = isFunctionalCurrency ? item.Sellprice.Amount : item.OSellprice.Amount;
//                decimal lSubtotal = lSP;
//                decimal lCreditCardCharge = lSubtotal*creditCardChargeRate/100;
//                result += (lSubtotal + lCreditCardCharge) * vat / 100;
//                */
//                AcceptTaxableItem(item);
//                //decimal lTotal = decimal.Truncate(lSubtotal * vat) / 100;
//                //result += lTotal;
//            }
//            public override void Accept(CreditCardChargeItem item)
//            {
//                //if (isFunctionalCurrency)
//                //{
//                //    result += item.Sellprice.Amount * vat / 100;
//                //}
//                //else
//                //{
//                //    result += item.OSellprice.Amount * vat / 100;
//                //}
//                /*
//                decimal lSP = isFunctionalCurrency ? item.Sellprice.Amount : item.OSellprice.Amount;
//                decimal lSubtotal = lSP * item.Quantity;
//                decimal lCreditCardCharge = lSubtotal*creditCardChargeRate/100;
//                result += (lSubtotal + lCreditCardCharge)*vat/100;
//                */
//
//                //decimal lCreditCardCharge = decimal.Truncate(result * creditCardChargeRate) / 100;
//                //result += lCreditCardCharge;
//            }
//
//            public override void Accept(ChargeItem item)
//            {
//                // do nothing
//            }
//
//            public override void Accept(FreeTextItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                //if (isFunctionalCurrency)
//                //{
//                //    result += item.Sellprice.Amount * item.Quantity * vat / 100;
//                //}
//                //else
//                //{
//                //    result += item.OSellprice.Amount * item.Quantity * vat / 100;
//                //}
//                /*
//                decimal lSP = isFunctionalCurrency ? item.Sellprice.Amount : item.OSellprice.Amount;
//                decimal lSubtotal = lSP * item.Quantity;
//                decimal lCreditCardCharge = lSubtotal*creditCardChargeRate/100;
//                result += (lSubtotal + lCreditCardCharge)*vat/100;
//                */
//                AcceptTaxableItem(item);
//            }
//
//            public override void Accept(ProductItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                //if (isFunctionalCurrency)
//                //{
//                //    result += item.Sellprice.Amount * item.Quantity * vat / 100;
//                //}
//                //else
//                //{
//                //    result += item.OSellprice.Amount * item.Quantity * vat / 100;
//                //}
//                /*
//                decimal lSP = isFunctionalCurrency ? item.Sellprice.Amount : item.OSellprice.Amount;
//                decimal lSubtotal = lSP * item.Quantity;
//                decimal lCreditCardCharge = lSubtotal*creditCardChargeRate/100;
//                result += (lSubtotal + lCreditCardCharge)*vat/100;
//                */
//                AcceptTaxableItem(item);
//            }
//
//            public override void Accept(ProductRequestItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                //if (isFunctionalCurrency)
//                //{
//                //    result += item.Sellprice.Amount * item.Quantity * vat / 100;
//                //}
//                //else
//                //{
//                //    result += item.OSellprice.Amount * item.Quantity * vat / 100;
//                //}
//                /*
//                decimal lSP = isFunctionalCurrency ? item.Sellprice.Amount : item.OSellprice.Amount;
//                decimal lSubtotal = lSP * item.Quantity;
//                decimal lCreditCardCharge = lSubtotal*creditCardChargeRate/100;
//                result += (lSubtotal + lCreditCardCharge)*vat/100;
//                */
//                AcceptTaxableItem(item);
//            }
//
//            public override void Accept(TrainingCourseItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                //result += item.Sellprice.Amount * item.Quantity * vat / 100;
//                /*
//                decimal lSP = isFunctionalCurrency ? item.Sellprice.Amount : item.OSellprice.Amount;
//                decimal lSubtotal = lSP * item.Quantity;
//                decimal lCreditCardCharge = lSubtotal*creditCardChargeRate/100;
//                result += (lSubtotal + lCreditCardCharge)*vat/100;
//                */
//                AcceptTaxableItem(item);
//            }
//
//        }
//
//        protected class CreditCardChargeVisitor : BaseItemsVisitor
//        {
//            private decimal result = 0;
//            private decimal ccc = 0;
//            private readonly bool isFunctionalCurrency = true;
//
//            public CreditCardChargeVisitor(decimal ccc)
//            {
//                this.ccc = ccc;
//                this.isFunctionalCurrency = true;
//            }
//
//            public CreditCardChargeVisitor(decimal ccc, bool isFunctionalCurrency)
//            {
//                this.ccc = ccc;
//                this.isFunctionalCurrency = isFunctionalCurrency;
//            }
//
//            public decimal Value
//            {
//                get { return result; }
//            }
//
//            public override void Accept(Order order)
//            {
//                result = 0;
//                base.Accept(order);
//            }
//
//            public override void Accept(CarriageItem item)
//            {
//                //                result += item.DeliveryType.Cost * Convert.ToDecimal(ccc) / 100;
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount * ccc / 100;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount * ccc / 100;
//                }
//            }
//            public override void Accept(CreditCardChargeItem item)
//            {
//                // do nothing
//            }
//
//            public override void Accept(ChargeItem item)
//            {
//                // do nothing
//            }
//
//            public override void Accept(FreeTextItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount * item.Quantity * ccc / 100;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount * item.Quantity * ccc / 100;
//                }
//            }
//
//            public override void Accept(ProductItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount * item.Quantity * ccc / 100;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount * item.Quantity * ccc / 100;
//                }
//            }
//
//            public override void Accept(ProductRequestItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount * item.Quantity * ccc / 100;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount * item.Quantity * ccc / 100;
//                }
//            }
//
//            public override void Accept(TrainingCourseItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount * item.Quantity * ccc / 100;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount * item.Quantity * ccc / 100;
//                }
//            }
//
//        }
//
//        protected class TotalVisitor : BaseItemsVisitor
//        {
//            private decimal result = 0;
//            private readonly bool isFunctionalCurrency = true;
//            private readonly bool isAddDiscountedProduct = true;
//
//            public TotalVisitor()
//            {
//                this.isFunctionalCurrency = true;
//            }
//
//            public TotalVisitor(bool isFunctionalCurrency)
//            {
//                this.isFunctionalCurrency = isFunctionalCurrency;
//            }
//
//            public TotalVisitor(bool isFunctionalCurrency, bool isAddDiscountedProduct)
//            {
//                this.isFunctionalCurrency = isFunctionalCurrency;
//                this.isAddDiscountedProduct = isAddDiscountedProduct;
//            }
//
//            public decimal Value
//            {
//                get { return result; }
//            }
//
//            public override void Accept(Order order)
//            {
//                result = 0;
//                base.Accept(order);
//            }
//
//            public override void Accept(CarriageItem item)
//            {
//                //                result += item.DeliveryType.Cost;
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount;
//                }
//            }
//
//            public override void Accept(CreditCardChargeItem item)
//            {
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount;
//                }
//            }
//
//            public override void Accept(ChargeItem item)
//            {
//                // do nothing
//            }
//
//            public override void Accept(FreeTextItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount * item.Quantity;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount * item.Quantity;
//                }
//            }
//
//            public override void Accept(ProductItem item)
//            {
//                if (!isAddDiscountedProduct)
//                {
//                    if (item.Product.ResultState != ResultStates.Enabled)
//                    {
//                        return;
//                    }
//                }
//
//                Assert.Check(item.Quantity > 0);
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount * item.Quantity;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount * item.Quantity;
//                }
//            }
//
//            public override void Accept(ProductRequestItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount * item.Quantity;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount * item.Quantity;
//                }
//            }
//
//            public override void Accept(TrainingCourseItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount * item.Quantity;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount * item.Quantity;
//                }
//            }
//        }
//
//        protected class ItemsTotalVisitor : BaseItemsVisitor
//        {
//            private decimal result = 0;
//            private readonly bool isFunctionalCurrency = true;
//
//            public ItemsTotalVisitor()
//            {
//                this.isFunctionalCurrency = true;
//            }
//
//            public ItemsTotalVisitor(bool isFunctionalCurrency)
//            {
//                this.isFunctionalCurrency = isFunctionalCurrency;
//            }
//
//            public decimal Value
//            {
//                get { return result; }
//            }
//
//            public override void Accept(Order order)
//            {
//                result = 0;
//                base.Accept(order);
//            }
//
//            public override void Accept(CarriageItem item)
//            {
//                // do nothing
//            }
//
//            public override void Accept(CreditCardChargeItem item)
//            {
//                // do nothing
//            }
//
//            public override void Accept(ChargeItem item)
//            {
//                // do nothing
//            }
//
//            public override void Accept(FreeTextItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount * item.Quantity;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount * item.Quantity;
//                }
//            }
//
//            public override void Accept(ProductItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount * item.Quantity;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount * item.Quantity;
//                }
//            }
//
//            public override void Accept(ProductRequestItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount * item.Quantity;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount * item.Quantity;
//                }
//            }
//
//            public override void Accept(TrainingCourseItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                if (isFunctionalCurrency)
//                {
//                    result += item.Sellprice.Amount * item.Quantity;
//                }
//                else
//                {
//                    result += item.OSellprice.Amount * item.Quantity;
//                }
//            }
//        }
//
//        protected class ProfitVisitor : BaseItemsVisitor
//        {
//            private decimal result = 0;
//
//            private OrderCalculator calculator;
//
//
//            public ProfitVisitor(OrderCalculator calculator)
//            {
//                if (calculator == null)
//                    throw new ArgumentNullException("calculator");
//                this.calculator = calculator;
//            }
//
//            public decimal Value
//            {
//                get { return result; }
//            }
//
//            public override void Accept(Order order)
//            {
//                result = 0;
//                base.Accept(order);
//            }
//
//            public override void Accept(CarriageItem item)
//            {
//                // do nothing
//            }
//
//            public override void Accept(CreditCardChargeItem item)
//            {
//                // do nothing
//            }
//
//            public override void Accept(ChargeItem item)
//            {
//                // do nothing
//            }
//
//            public override void Accept(FreeTextItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                result += calculator.GetItemProfit(item);
//            }
//
//            public override void Accept(ProductItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                result += calculator.GetItemProfit(item);
//            }
//
//            public override void Accept(ProductRequestItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                result += calculator.GetItemProfit(item);
//            }
//
//            public override void Accept(TrainingCourseItem item)
//            {
//                Assert.Check(item.Quantity > 0);
//                result += calculator.GetItemProfit(item);
//            }
//        }
//
//        #endregion
//
//        public decimal Vat
//        {
//            get
//            {
//                VatVisitor visitor = new VatVisitor(VAT, CreditCardChargeRate, isFunctionalCurrency);
//                visitor.Accept(order);
//                return visitor.Value;
//            }
//        }
//
//        public decimal CreditCardCharge
//        {
//            get
//            {
//                return decimal.Truncate((Total + Vat) * CreditCardChargeRate) / 100;
//                /*
//                CreditCardChargeVisitor visitor = new CreditCardChargeVisitor(CreditCardChargeRate, isFunctionalCurrency);
//                visitor.Accept(order);
//                return visitor.Value;
//                */
//            }
//        }
//
//        //use it only get Name & Id DeliveryType, for Cost use property DeliveryCost
//        public OrderDeliveryType Delivery
//        {
//            get
//            {
//                CarriageItem carriage = GetCarriage();
//                return carriage != null ? carriage.DeliveryType : new OrderDeliveryType("", 0, "", 0 /*false*/, 0, false);
//            }
//        }
//
//        public decimal DeliveryCost
//        {
//            get
//            {
//                CarriageItem carriage = GetCarriage();
//                if (carriage != null)
//                    return carriage.DeliveryType.Cost;
//                    /*
//                                    if (isFunctionalCurrency)
//                                        return (carriage.Sellprice != null && carriage.Sellprice.Amount > 0) ? carriage.Sellprice.Amount : carriage.DeliveryType.Cost;
//                                    else
//                                        return (carriage.OSellprice != null && carriage.OSellprice.Amount > 0) ? carriage.OSellprice.Amount : new Money(carriage.DeliveryType.Cost, order.Total.Currency).ConvertTo(order.OTotal.Currency).Amount;
//                */
//                else
//                    return 0;
//            }
//        }
//
//        public decimal CreditCardChargeRate
//        {
//            get
//            {
//                CardType ct = null; //Cards.Find(order.CardType);
//                if (ct != null)
//                {
//                    return ct.Charge;
//                }
//                else
//                {
//                    return 0;
//                }
//            }
//        }
//
//        public decimal Total
//        {
//            get
//            {
//                TotalVisitor visitor = new TotalVisitor(isFunctionalCurrency, isAddDiscountedProduct);
//                visitor.Accept(order);
//                return visitor.Value - (ExistPhysicalProduct() ? 0 : DeliveryCost);
//            }
//        }
//
//        public decimal ItemsTotal
//        {
//            get
//            {
//                ItemsTotalVisitor visitor = new ItemsTotalVisitor(isFunctionalCurrency);
//                visitor.Accept(order);
//                return visitor.Value;
//            }
//        }
//
//
//
//        public CarriageItem GetCarriage()
//        {
//            GroupedItems groupedItems = new GroupedItems();
//            groupedItems.Accept(order);
//            return groupedItems.CarriageItems.Count > 0 ? groupedItems.CarriageItems[0] : null;
//        }
//
//        public CreditCardChargeItem GetCreditCardChargeItem()
//        {
//            GroupedItems groupedItems = new GroupedItems();
//            groupedItems.Accept(order);
//            return groupedItems.CreditCardChargeItems.Count > 0 ? groupedItems.CreditCardChargeItems[0] : null;
//        }
//
//        public decimal Profit
//        {
//            get
//            {
//                ProfitVisitor visitor = new ProfitVisitor(this);
//                visitor.Accept(order);
//                return visitor.Value;
//            }
//        }
//
//        public double PercentageProfit
//        {
//            get
//            {
//                if (ItemsTotal == 0)
//                    return 0;
//                return Convert.ToDouble(Profit * 100 / ItemsTotal);
//
//            }
//        }
//
//        /// <summary>
//        /// return margin of order item (sum form products in item)
//        /// </summary>
//        /// <param name="item"></param>
//        /// <returns></returns>
//        public decimal GetItemProfit(OrderItem item)
//        {
//            //            Assert.Check(item.Quantity > 0);
//            if (IsFunctionalCurrency)
//            {
//                return (item.Sellprice.Amount - item.Costprice.Amount) * item.Quantity;
//            }
//            else
//            {
//                decimal profit = (item.Sellprice.Amount - item.Costprice.Amount) * item.Quantity;
//                return new Money(profit, item.Costprice.Currency).ConvertTo(order.OTotal.Currency).Amount;
//            }
//        }
//
//        public decimal GetItemMargin(OrderItem item)
//        {
//            //Not depended from Currency
//            if (item.Costprice.Amount > 0)
//            {
//                return (item.Sellprice.Amount - item.Costprice.Amount) / item.Sellprice.Amount * 100;
//            }
//            else return 0;
//        }
//
//        public decimal GetOrderMargin(Order pOrder)
//        {
//
//            GroupedItems groupedItems = new GroupedItems();
//            groupedItems.Accept(pOrder);
//            OrderCalculator lOrderCalculator = new OrderCalculator(pOrder);
//            decimal result = 0;
//
//            List<OrderItem> productItems = groupedItems.GetSellProductItems();
//
//            if (productItems.Count == 0)
//                throw new InvalidOperationException();
//
//
//            foreach (OrderItem lProductItem in productItems)
//            {
//                result += lOrderCalculator.GetItemMargin(lProductItem);
//            }
//
//            result = result / (productItems.Count);
//
//            return result;
//        }
//
//        /// <summary>
//        /// return margin of product in order item
//        /// </summary>
//        /// <param name="item"></param>
//        /// <returns></returns>
//        public decimal GetItemProductProfit(OrderItem item)
//        {
//            if (isFunctionalCurrency)
//            {
//                return (item.Sellprice.Amount - item.Costprice.Amount);
//            }
//            else
//            {
//                decimal profit = item.Sellprice.Amount - item.Costprice.Amount;
//                return new Money(profit, item.Costprice.Currency).ConvertTo(order.OTotal.Currency).Amount;
//            }
//        }
//
//
//        public Order Order
//        {
//            get { return order; }
//        }
//
//        public static decimal CalculateSellprice(decimal pCostprice, ModifierType pModifierType, decimal pModifier)
//        {
//            switch (pModifierType)
//            {
//                    // Наценка в процентах
//                case ModifierType.Margin:
//                    return pCostprice / (100 - pModifier) * 100;// pCostprice + pCostprice * pModifier / 100;
//                    // Наценка в абсолютной величине
//                case ModifierType.PriceAdjustment:
//                    return pCostprice + pModifier;
//                case ModifierType.FixedPrice:
//                    return pModifier;
//                case ModifierType.IncExcFlag:
//                    return pModifier;
//                default:
//                    throw new Exception("Not known sellprice modifier type.");
//            }
//        }
//
//        public static decimal CalculateMargin(decimal pCostprice, ModifierType pModifierType, decimal pModifier)
//        {
//            switch (pModifierType)
//            {
//                    // Наценка в процентах
//                case ModifierType.Margin:
//                    return pModifier;
//                    // Наценка в абсолютной величине
//                case ModifierType.PriceAdjustment:
//                    if (pCostprice != 0)
//                        return pModifier / pCostprice * 100;
//                    else
//                        return 0;
//                case ModifierType.FixedPrice:
//                    if (pCostprice != 0)
//                        return (pModifier - pCostprice) / pCostprice * 100;
//                    else
//                        return 0;
//                case ModifierType.IncExcFlag:
//                    return pModifier;
//                default:
//                    throw new Exception("Not known sellprice modifier type.");
//            }
//        }
//
//        public static string GetQuoteRef(int id)
//        {
//            //return "Q" + (500000 + id);
//            if (id < 0)
//                id = -1 * id;
//            return "Q" + id;
//        }
//
//        public static string GetQuoteRef(string id)
//        {
//            //return "Q" + (500000 + Convert.ToInt32(id));
//            return GetQuoteRef(Convert.ToInt32(id));
//        }
//
//        public static string GetOrderRef(int id)
//        {
//            //return "O" + (500000 + id);
//            return "O" + id;
//        }
//
//        public static string GetOrderRef(string id)
//        {
//            //return "O" + (500000 + Convert.ToInt32(id));
//            return "O" + Convert.ToInt32(id);
//        }


    }
}